<?php
/**
 * Classe responsável por controlar o acesso ao banco de dados.
 * Está classe implementa o padrão de projeto Singleton para evitar que exista
 * mais de uma instância da classe PDO durante a execução do sistema.
 *
 * @access public
 * @author Marcos Vinícius Pereira dos Santos, <marcos@eagletecnologia.com>
 * @version 1.0
 * @package core
 */
class DataBase {
    /**
     * Propriedade que guarda a instancia da conexao com o banco de dados.
     * @access private
     * @var PDO
     */
    private static $dataBase;

    /**
     * Construtor privado da classe para impedir a instânciação de um objeto.
     * @access private
     */
    private function __construct() {
    }

    /**
     * Método responsável por recuperar a instância da classe PDO.
     * @access public
     * @param  Array $dbConfig Configurações da conexão com a base de dados.
     * @param  Boolean $new Parâmentro que indica se deverá ser instânciado
     * uma nova conexão.
     * @return PDO Caso não ocorrá nenhum erro será retornado a instância da
     * classe PDO.
     */
    public static function getDataBase(Array $dbConfig, $new = false){
        if(!isset(self::$dataBase) || $new){

            self::$dataBase = new PDO($dbConfig['sgbd'].":host=".$dbConfig['host'].";dbname=".$dbConfig['dbname'],$dbConfig['user'],$dbConfig['password']);
        }

        return self::$dataBase;
    }

    /**
     * Método que impede a clonagem da classe.
     * @access public
     */
    public function __clone() {
        trigger_error('Clone não é permitido.', E_USER_ERROR);
    }
}
?>
